package com.deep.deepenterpise.common.result;


import com.deep.deepenterpise.common.code.DrCodeMsg;
import lombok.Getter;
import lombok.Setter;

import java.util.Map;

/**
 * 2020-04-23 16:23
 * 统一返回结果类
 *
 * @author xyz
 */
@Getter
@Setter
public class DrResult extends DrRequest {
    private DrResult() {
    }


    /**
     * 成功的静态方法
     *
     * @return Result
     */
    public static DrResult ok() {
        DrResult r = new DrResult();
        r.setDrCode(DrCodeMsg.SUCCESS_TRUE.getCode());
        r.setDrMsg(DrCodeMsg.SUCCESS_TRUE.getMsg());
        return r;
    }

    /**
     * 成功的静态方法（带参数）
     *
     * @return Result
     */
    public static DrResult ok(String message) {
        DrResult r = new DrResult();
        r.setDrCode(DrCodeMsg.SUCCESS_TRUE.getCode());
        r.setDrMsg(message);
        return r;
    }

    /**
     * 成功的静态方法（带参数）
     *
     * @return Result
     */
    public static DrResult ok(DrCodeMsg codeMsg) {
        DrResult r = new DrResult();
        r.setDrCode(codeMsg.getCode());
        r.setDrMsg(codeMsg.getMsg());
        return r;
    }

    /**
     * 失败的静态方法
     *
     * @return Result
     */
    public static DrResult error() {
        DrResult r = new DrResult();
        r.setDrCode(DrCodeMsg.SUCCESS_FALSE.getCode());
        r.setDrMsg(DrCodeMsg.SUCCESS_FALSE.getMsg());
        return r;
    }

    /**
     * 失败的静态方法（带参数）
     *
     * @return Result
     */
    public static DrResult error(String message) {
        DrResult r = new DrResult();
        r.setDrCode(DrCodeMsg.SUCCESS_FALSE.getCode());
        r.setDrMsg(message);
        return r;
    }


    /**
     * 失败的静态方法（带参数）
     *
     * @return Result
     */
    public static DrResult error(DrCodeMsg codeMsg) {
        DrResult r = new DrResult();
        r.setDrCode(codeMsg.getCode());
        r.setDrMsg(codeMsg.getMsg());
        return r;
    }

    /**
     * 设置消息
     *
     * @param message 消息
     * @return Result
     */
    public DrResult message(String message) {
        this.setDrMsg(message);
        return this;
    }

    /**
     * 设置状态码
     *
     * @param code 状态码
     * @return Result
     */
    public DrResult code(Integer code) {
        this.setDrCode(code);
        return this;
    }

    /**
     * 设置数据
     *
     * @param drData 数据
     * @return Result
     */
    public DrResult data(Object drData) {
        this.setDrData(drData);
        return this;
    }

    /**
     * 设置数据信息
     *
     * @param map map集合
     * @return Result
     */
    public DrResult data(Map<String, Object> map) {
        this.setDrData(map);
        return this;
    }

    public boolean success() {
        return this.getDrCode() == 200;
    }
}
